<?php
/**
 * Implenta las funciones necesarias para gestionar un usuario del sistema
 *
 * @author Daniel Cardoza, Gary Dos Santos, Freddy Rodriguez
 */
class DBUsuarioDAO extends DBMySQLDAO implements IDBUsuarioDAO {

    private $usuario = null;

    public function  __construct() {
        try {
            $conexion = new conexion();
            $this->DBConn = $conexion->setConnect();
        } catch ( SQLException $Ex ) {
            throw new DBUsuarioDAOException("Se produjo un error al concetar con la base de datos", 1);
        }

    }

     /**
     *Permite hacer login de un usuario al sistema, esto se hace mediante
     * a la validacion de que la cedula y la clave existen.
     *
     * @param <int> $cedula
     * @param <string> $clave
     * @return <bool>
     */
    public function login( $cedula, $clave ){
        $cedula = addslashes( $cedula );
        $clave = addslashes( $clave );

        $str = "SELECT *
                    FROM usuario
                    WHERE USR_CEDULA = {$cedula}
                    AND USR_CLAVE = '{$clave}'
                    AND USR_STATUS = 1";

        $this->DBConn->consulta( $str );
        $fila = $this->DBConn->extraer_registro();

        if( $fila != false ) {
            $usuario = new Usuario($fila['USR_ID'], $fila['USR_CEDULA'], $fila['USR_NOMBRE'],
                    $fila['USR_APELLIDO'], $fila['USR_DIRECCION'], $fila['USR_TELEFONO'],
                    $fila['USR_EMAIL'], $fila['USR_CLAVE'], $fila['USR_PRIVILEGIO']);

            return $usuario;
        }

        return false;

    }

    /**
     *Devuelve un vector con toda la informacion del usuario que tenga el id
     * que entra por parametro
     *
     * @param <int> $id
     * @return <Array> $fila
     * @return <bool> false
     * @test
     */
    public function select( $id ) {
        $id = addslashes( $id );

        $str = "SELECT *
                    FROM usuario
                    WHERE USR_ID = {$id}
                    AND USR_STATUS = 1";
                    
        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){
            $fila = $this->DBConn->extraer_registro();

             $usuario = new Usuario($fila['USR_ID'], $fila['USR_CEDULA'], $fila['USR_NOMBRE'],
                    $fila['USR_APELLIDO'], $fila['USR_DIRECCION'], $fila['USR_TELEFONO'],
                    $fila['USR_EMAIL'], $fila['USR_CLAVE'], $fila['USR_PRIVILEGIO']);
            
             return $usuario;
        } else {
            return false;
        }

    }

    /**
     * Introduce un usuario nuevo a la base de datos
     *
     * @return <bool> true
     * @return <bool> false
     * @test
     */
    public function insert( Usuario $usuario ) {
        $id = addslashes( $usuario->getId() );
        $cedula = addslashes( $usuario->getCedula() );
        $nombre = addslashes( $usuario->getNombre() );
        $apellido = addslashes( $usuario->getApellido() );
        $direccion = addslashes( $usuario->getDireccion() );
        $telefono = addslashes( $usuario->getTelefono() );
        $email = addslashes( $usuario->getEmail() );
        $clave = addslashes( $usuario->getClave() );
        $privilegio = addslashes( $usuario->getPrivilegio() );

        if ( $usuario->getId() != -1 ){
            $str = "INSERT INTO Usuario
                        VALUES (NULL,{$cedula},'{$nombre}', '{$apellido}','{$direccion}', '{$telefono}',
                        '{$email}','{$clave}','{$privilegio}',1)";
            
            $this->DBConn->consulta( $str );
        } else {
            $str = "INSERT INTO Usuario
                        VALUES ({$id},{$cedula},'{$nombre}', '{$apellido}','{$direccion}', '{$telefono}',
                        '{$email}','{$clave}','{$privilegio}',1)";

            $this->DBConn->consulta( $str );
        }
        
        if ( $this->DBConn->filasAfectadas() != -1){
            return true;
        } else {
            return false;
        }
        
    }

    /**
     * Actualiza un usuario del sistema
     *
     * @return <bool> true
     * @return <bool> false
     * @test
     */
    public function update( Usuario $usuario ){
        $id = addslashes( $usuario->getId() );
        $cedula = addslashes( $usuario->getCedula() );
        $nombre = addslashes( $usuario->getNombre() );
        $apellido = addslashes( $usuario->getApellido() );
        $direccion = addslashes( $usuario->getDireccion() );
        $telefono = addslashes( $usuario->getTelefono() );
        $email = addslashes( $usuario->getEmail() );
        $clave = addslashes( $usuario->getClave() );
        $privilegio = addslashes( $usuario->getPrivilegio() );

        $str = "UPDATE Usuario
                    SET USR_CEDULA = {$cedula},
                    USR_NOMBRE = '{$nombre}',
                    USR_APELLIDO = '{$apellido}',
                    USR_DIRECCION = '{$direccion}',
                    USR_TELEFONO = '{$telefono}',
                    USR_EMAIL = '{$email}',
                    USR_CLAVE = '{$clave}',
                    USR_PRIVILEGIO = '{$privilegio}'
                    WHERE USR_ID = {$id}";

        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){
            return true;
        } else {
            return false;
        }
        
    }

    /**
    * Eliminacion de un usuario en base de datos
    *
    * @return <bool> true
    * @return <bool> false
    * @test
    */
    public function delete( $id ){
        if( $_SESSION['USR_ID'] != $id ){
            $id = addslashes( $id );

            $str = "UPDATE Usuario
                        SET USR_STATUS = 0
                        WHERE USR_ID = $id";
            
            $this->DBConn->consulta( $str );
            
            if ( $this->DBConn->filasAfectadas() != -1){
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
    * Devuelve una lista con todos los usuarios
    *
    * @return <array> usuario
    * @return <bool> true
    * @return <bool> false
    * @test
    */
    public function listaUsuario(){
        $str = "SELECT *
                    FROM usuario
                    WHERE USR_STATUS = 1";
        
        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){

            while ( $fila = $this->DBConn->extraer_registro() ) {
                 $usuario = new Usuario($fila['USR_ID'], $fila['USR_CEDULA'], $fila['USR_NOMBRE'],
                        $fila['USR_APELLIDO'], $fila['USR_DIRECCION'], $fila['USR_TELEFONO'],
                        $fila['USR_EMAIL'], $fila['USR_CLAVE'], $fila['USR_PRIVILEGIO']);

                 $listaUsuarios[] = $usuario;
            }
            
            return $listaUsuarios;
        } else {
            return false;
        }
    }

}

?>
